//package com.ruoyi.web.controller.excel;
//
//import org.apache.poi.ss.usermodel.*;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//
//import java.io.File;
//import java.io.FileInputStream;
//import java.sql.*;
//
//public class ExcelToDatabase {
//    public static void main(String[] args) {
//        // Excel 文件路径
//        String excelFilePath = "C:\\Users\\Administrator\\Desktop\\2\\2\\匹配好的数据(2).xlsx";
//        // 数据库连接信息
//        String jdbcUrl = "jdbc:mysql://121.40.213.157:3306/sys_bike";  // 数据库 URL
//        String dbUser = "root";  // 数据库用户名
//        String dbPassword = "hge28988932!";  // 数据库密码
//
//        try (FileInputStream fis = new FileInputStream(new File(excelFilePath));
//             // 使用 Apache POI 库加载 Excel 文件
//             Workbook workbook = new XSSFWorkbook(fis);
//             // 连接到 MySQL 数据库
//             Connection conn = DriverManager.getConnection(jdbcUrl, dbUser, dbPassword)) {
//
//            conn.setAutoCommit(false); // 开启事务管理，手动提交事务
//
//            // 获取 Excel 工作表（Sheet1）
//            Sheet sheet = workbook.getSheet("Sheet1");
//            if (sheet == null) {
//                System.out.println("Sheet1 not found");
//                return;  // 如果找不到 "Sheet1"，则退出程序
//            }
//
//            // SQL 更新语句，用于更新数据库中的 mark_type 字段
//            String updateSQL = "UPDATE sys_order SET mark_type = ? WHERE record_no = ?";
//
//            try (PreparedStatement pstmt = conn.prepareStatement(updateSQL)) { //PreparedStatement 提供了预编译 SQL 的能力，可以提高执行效率并防止 SQL 注入攻击
//
//                // 遍历 Excel 中的每一行
//                for (Row row : sheet) {
//                    if (row.getRowNum() == 0) {
//                        continue; // 跳过表头行
//                    }
//
//                    // 获取 Excel 中每行的第一列 (record_no) 和第二列 (mark_type)
//                    Cell recordNoCell = row.getCell(0); // 第一列为 record_no
//                    Cell markTypeCell = row.getCell(1); // 第二列为 mark_type
//
//                    // 如果 recordNoCell 或 markTypeCell 为空，则跳过该行
//                    if (recordNoCell == null || markTypeCell == null) {
//                        continue;
//                    }
//
//                    // 处理 record_no 单元格，获取其值
//                    String recordNo = null;
//                    if (recordNoCell.getCellType() == CellType.STRING) {
//                        recordNo = recordNoCell.getStringCellValue();  // 如果是字符串类型
//                    } else if (recordNoCell.getCellType() == CellType.NUMERIC) {
//                        recordNo = String.valueOf(recordNoCell.getNumericCellValue());  // 如果是数字类型
//                    }
//
//                    // 如果 recordNo 为空或仅包含空白字符，跳过此行
//                    if (recordNo == null || recordNo.trim().isEmpty()) {
//                        continue;
//                    }
//
//                    // 处理 mark_type 单元格，获取其值
//                    long markType = -1; // 默认设置为 -1，表示无效值
//                    if (markTypeCell.getCellType() == CellType.NUMERIC) {
//                        markType = (long) markTypeCell.getNumericCellValue();  // 如果是数字类型
//                    } else if (markTypeCell.getCellType() == CellType.STRING) {
//                        try {
//                            markType = Long.parseLong(markTypeCell.getStringCellValue());  // 如果是字符串类型，尝试将其解析为 long 类型
//                        } catch (NumberFormatException e) {
//                            System.err.println("Invalid mark_type format: " + markTypeCell.getStringCellValue());
//                            continue;  // 如果格式不正确，跳过此行
//                        }
//                    }
//
//                    // 如果 markType 仍然为 -1，表示无效值，跳过此行
//                    if (markType == -1) {
//                        continue;
//                    }
//
//                    // 设置 PreparedStatement 的参数并执行更新操作
//                    pstmt.setLong(1, markType);  // 设置 mark_type 参数
//                    pstmt.setString(2, recordNo);  // 设置 record_no 参数
//                    pstmt.executeUpdate();  // 执行更新语句
//                }
//
//                // 提交事务，保存所有更新操作
//                conn.commit();
//                System.out.println("数据库更新完成。");
//
//            } catch (Exception e) {
//                conn.rollback();  // 如果发生异常，回滚事务，避免部分更新导致数据不一致
//                System.err.println("事务回滚，发生错误：" + e.getMessage());
//                e.printStackTrace();
//            }
//
//        } catch (Exception e) {
//            e.printStackTrace();  // 捕获文件或数据库连接异常
//        }
//    }
//}
